package com.wuliupai.delivery.wuliupaidelivery.utils;

import android.content.Context;

import com.baidu.location.LocationClient;
import com.baidu.location.LocationClientOption;

/**
 * Class:百度地图定位
 * Created by KANG on 2016/11/25  17:42.
 * Email:khl8912@126.com
 */

public class LocationUtil {

    /**
     * 获取并保存当前位置到共享参数
     *
     * @param context
     */
    public static void getAndSaveLocation2SharePreference(Context context) {
        LocationClient mLocationClient = new LocationClient(context.getApplicationContext());//声明LocationClient类

        //注册监听函数
        mLocationClient.registerLocationListener(bdLocation -> {

            double loNum = bdLocation.getLongitude();
            double laNum = bdLocation.getLatitude();
            String lo = loNum < 0.01 ? "0" : loNum + "";
            String la = laNum < 0.01 ? "0" : laNum + "";
            SharePreferenceUtil.saveLocation(context, lo, la);
            LogUtils.log("确认收货位置---" + lo + "," + la);
        });
        initLocationClient(mLocationClient);
        mLocationClient.start();
    }

    /**
     * 初始化LocationClient
     *
     * @param mLocationClient
     */
    public static void initLocationClient(LocationClient mLocationClient) {
        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy
        );//可选，默认高精度，设置定位模式，高精度，低功耗，仅设备
        option.setCoorType("bd09ll");//可选，默认gcj02，设置返回的定位结果坐标系
        option.setScanSpan(0);//可选，默认0，即仅定位一次，设置发起定位请求的间隔需要大于等于1000ms才是有效的
        option.setIsNeedAddress(true);//可选，设置是否需要地址信息，默认不需要
        option.setOpenGps(true);//可选，默认false,设置是否使用gps
        option.setLocationNotify(true);//可选，默认false，设置是否当GPS有效时按照1S/1次频率输出GPS结果
        option.setIsNeedLocationDescribe(true);//可选，默认false，设置是否需要位置语义化结果，可以在BDLocation.getLocationDescribe里得到，结果类似于“在北京天安门附近”
        option.setIsNeedLocationPoiList(true);//可选，默认false，设置是否需要POI结果，可以在BDLocation.getPoiList里得到
        option.setIgnoreKillProcess(false);//可选，默认true，定位SDK内部是一个SERVICE，并放到了独立进程，设置是否在stop的时候杀死这个进程，默认不杀死
        option.SetIgnoreCacheException(false);//可选，默认false，设置是否收集CRASH信息，默认收集
        option.setEnableSimulateGps(false);//可选，默认false，设置是否需要过滤GPS仿真结果，默认需要
        mLocationClient.setLocOption(option);
    }

    /**
     * 初始化LocationClient
     *
     * @param mLocationClient
     */
    public static void initLocationClient(LocationClient mLocationClient, int span) {
        LocationClientOption option = new LocationClientOption();
        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy
        );//可选，默认高精度，设置定位模式，高精度，低功耗，仅设备
        option.setCoorType("bd09ll");//可选，默认gcj02，设置返回的定位结果坐标系
        option.setScanSpan(span * 1000);//可选，默认0，即仅定位一次，设置发起定位请求的间隔需要大于等于1000ms才是有效的
        option.setIsNeedAddress(true);//可选，设置是否需要地址信息，默认不需要
        option.setOpenGps(true);//可选，默认false,设置是否使用gps
        option.setLocationNotify(true);//可选，默认false，设置是否当GPS有效时按照1S/1次频率输出GPS结果
        option.setIsNeedLocationDescribe(true);//可选，默认false，设置是否需要位置语义化结果，可以在BDLocation.getLocationDescribe里得到，结果类似于“在北京天安门附近”
        option.setIsNeedLocationPoiList(true);//可选，默认false，设置是否需要POI结果，可以在BDLocation.getPoiList里得到
        option.setIgnoreKillProcess(false);//可选，默认true，定位SDK内部是一个SERVICE，并放到了独立进程，设置是否在stop的时候杀死这个进程，默认不杀死
        option.SetIgnoreCacheException(false);//可选，默认false，设置是否收集CRASH信息，默认收集
        option.setEnableSimulateGps(false);//可选，默认false，设置是否需要过滤GPS仿真结果，默认需要
        mLocationClient.setLocOption(option);
    }

//    static BDLocationListener myListener;

//    public static void initLocation(Context context) {
//        myListener = new MyLocationListener(context);
//        LocationClient mLocationClient = new LocationClient(context.getApplicationContext());     //声明LocationClient类
//        mLocationClient.registerLocationListener(myListener);    //注册监听函数
////        LocationClientOption option = new LocationClientOption();
////        option.setLocationMode(LocationClientOption.LocationMode.Hight_Accuracy
////        );//可选，默认高精度，设置定位模式，高精度，低功耗，仅设备
////        option.setCoorType("bd09ll");//可选，默认gcj02，设置返回的定位结果坐标系
////        int span = 0;
////        option.setScanSpan(span);//可选，默认0，即仅定位一次，设置发起定位请求的间隔需要大于等于1000ms才是有效的
////        option.setIsNeedAddress(true);//可选，设置是否需要地址信息，默认不需要
////        option.setOpenGps(true);//可选，默认false,设置是否使用gps
////        option.setLocationNotify(true);//可选，默认false，设置是否当GPS有效时按照1S/1次频率输出GPS结果
////        option.setIsNeedLocationDescribe(true);//可选，默认false，设置是否需要位置语义化结果，可以在BDLocation.getLocationDescribe里得到，结果类似于“在北京天安门附近”
////        option.setIsNeedLocationPoiList(true);//可选，默认false，设置是否需要POI结果，可以在BDLocation.getPoiList里得到
////        option.setIgnoreKillProcess(false);//可选，默认true，定位SDK内部是一个SERVICE，并放到了独立进程，设置是否在stop的时候杀死这个进程，默认不杀死
////        option.SetIgnoreCacheException(false);//可选，默认false，设置是否收集CRASH信息，默认收集
////        option.setEnableSimulateGps(false);//可选，默认false，设置是否需要过滤GPS仿真结果，默认需要
////        mLocationClient.setLocOption(option);
//        initLocationClient(mLocationClient);
//        mLocationClient.start();
//    }

//    static class MyLocationListener implements BDLocationListener {
//
//        Context context;
//
//        MyLocationListener(Context context) {
//            this.context = context;
//        }
//
//        @Override
//        public void onReceiveLocation(BDLocation bdLocation) {
//            String lo = bdLocation.getLongitude() + "";
//            String la = bdLocation.getLatitude() + "";
//            SharePreferenceUtil.saveLocation(context, lo, la);
//            LogUtils.log("确认收货位置---" + lo + "," + la);
//        }
//    }

//    /**
//     * 通过市县名称反编译出该地所对应的经纬度
//     *
//     * @param context
//     * @param city
//     * @param area
//     * @param type    经纬度类型
//     *                s:出发地
//     *                r:目的地
//     * @return
//     */
//    public static GeoCoder calculateFreight(Context context, String city, String area, String type) {
//        GeoCoder geoCoder = GeoCoder.newInstance();
//        geoCoder.setOnGetGeoCodeResultListener(new MyLocationCalculateFreight(context, type));
//        geoCoder.geocode(new GeoCodeOption().city(city).address(area));
//        return geoCoder;
//    }
//
//    static class MyLocationCalculateFreight implements OnGetGeoCoderResultListener {
//        String type;
//        Context context;
//
//        MyLocationCalculateFreight(Context context, String type) {
//            this.context = context;
//            this.type = type;
//        }
//
//        @Override
//        public void onGetGeoCodeResult(GeoCodeResult geoCodeResult) {
//            if (geoCodeResult == null || geoCodeResult.error != SearchResult.ERRORNO.NO_ERROR) {
//                // TODO 没有检索到结果
//            }
//            try {
//                String longitude = String.valueOf(geoCodeResult.getLocation().longitude);
//                String latitude = String.valueOf(geoCodeResult.getLocation().latitude);
//                // TODO 获取地理编码结果
//                if (type.equals("s")) {
//                    SharePreferenceUtil.saveLocationS(context, longitude, latitude);
//                } else {
//                    SharePreferenceUtil.saveLocationR(context, longitude, latitude);
//                }
//            } catch (NullPointerException e) {
//                e.printStackTrace();
//            }
//        }
//
//        @Override
//        public void onGetReverseGeoCodeResult(ReverseGeoCodeResult reverseGeoCodeResult) {
//            if (reverseGeoCodeResult == null || reverseGeoCodeResult.error != SearchResult.ERRORNO.NO_ERROR) {
//                // TODO 没有找到检索结果
//            }
//            // TODO 获取反向地理编码结果
//        }
//    }
}